import { defineStore } from "pinia"
 
const useUserInfoStore = defineStore('userInfo', {
  // defineStore('userInfo',{})  userInfo就是这个仓库的名称name
  state: () => ({
    username: '赫赫',
    age: 30,
    like: 'girl',
    obj:{ money:100,friend:10 },
    hobby: [
       { id: 1, name: '篮球', level: 1 },  
       { id: 2, name: 'rap', level: 10 }
     ]
  })
  // 定义状态，可以是一个对象，也可以是一个函数，返回一个对象。对象中的属性就是仓库中的数据。
  // 状态的初始值，可以通过函数返回，也可以直接定义对象。函数返回的值就是初始值。
  // 函数返回的值，可以通过this.state来访问。this.state.username就是仓库中的数据。
  // 函数返回的值，可以通过this.state.username来访问。this.state.username就是仓库中的数据。
  ,
  // 定义getter，可以是一个对象，也可以是一个函数，返回一个对象。对象中的属性就是仓库中的getter。	
    getters: {
          // 类似于计算属性，参数state指向defineStore下的state
          doubleAge(state) {
              return state.age * 2
          },
          //在getter中 使用另一个getter  this指向当前存储库
          addOneAge() {
              return this.doubleAge + 1
          },
          //返回一个函数
          returnFunction(state) {
              return function (id) {
                  return state.hobby.find(item => item.id == id)
              }
          }
      },
  //可以通过this访问整个store实例的所有操作，支持异步操作
      actions: {
          //非异步操作
          addAge(e) {
              console.log('接受的数据', e) //e是外部调用方法传递的参数
              this.age = this.age + e
          },
          // 模拟异步
          asynchronous() {
              return new Promise((resolve)=> {
                  setTimeout(() => {
                      resolve('模拟异步返回值')
                  }, 2000);
              })
          },
          // 异步操作
          async getList () {
              const res = await this.asynchronous()
              console.log(res)
          }
      },
		// 定义其他操作，可以是一个对象，也可以是一个函数，返回一个对象。对象中的属性就是仓库中的其他操作。
		// 调用action中的方法
		/* const add = ()=> {
		  userInfoStore.addAge(5)
		}
		//调用异步方法
		const getLisst = ()=> {
		  userInfoStore.getList()
		} */
		persist: true,// 定义持久化，可以是一个对象，也可以是一个函数，返回一个对象。对象中的属性就是仓库中的持久化。

  
})
 
export default useUserInfoStore